<?php
use app\home\controller\Curl;
ini_set ( 'date.timezone', 'Asia/Shanghai' );
error_reporting ( E_ERROR );

require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';

// 初始化日志
$logHandler = new CLogFileHandler ( "../logs/" . date ( 'Y-m-d' ) . '.log' );
$log = Log::Init ( $logHandler, 15 );
class PayNotifyCallBack extends WxPayNotify {
	protected function http_post($url, $param = array()) {
		if (! is_array ( $param )) {
			throw new Exception ( "参数必须为array" );
		}
		$headers = array (
				'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0' 
		);
		
		$ch = curl_init ( $url );
		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt ( $ch, CURLOPT_HEADER, true );
		curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
		curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
		curl_setopt ( $ch, CURLOPT_POST, 1 ); // 设置为POST方式
		curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param );
		curl_setopt ( $ch, CURLOPT_HEADER, 0 );
		$result = curl_exec ( $ch );
		curl_close ( $ch );
		return $result;
	}
	// 查询订单
	public function Queryorder($transaction_id) {
		$input = new WxPayOrderQuery ();
		$input->SetTransaction_id ( $transaction_id );
		$result = WxPayApi::orderQuery ( $input );
		Log::DEBUG ( "query:" . json_encode ( $result ) );
		if (array_key_exists ( "return_code", $result ) && array_key_exists ( "result_code", $result ) && $result ["return_code"] == "SUCCESS" && $result ["result_code"] == "SUCCESS") {
			return true;
		}
		return false;
	}
	
	// 重写回调处理函数
	public function NotifyProcess($data, &$msg) {
		$notfiyOutput = array ();
		if (! array_key_exists ( "transaction_id", $data )) {
			$msg = "输入参数不正确";
			return false;
		}
		// 查询订单，判断订单真实性
		if (! $this->Queryorder ( $data ["transaction_id"] )) {
			$msg = "订单查询失败";
			return false;
		}
		Log::DEBUG ( "call back:" . json_encode ( $data ) );
		if (strstr ( $data ['attach'], "signe" )) {
			Log::DEBUG ( "requre url:" . "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/signe" );
			self::http_post ( "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/signe", $data );
			return true;
		}
		if (strstr ( $data ['attach'], "mbti" )) {
			Log::DEBUG ( "requre url:" . "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/mbti" );
			self::http_post ( "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/mbti", $data );
			return true;
		}
		if (strstr ( $data ['attach'], "selectUn" )) {
			Log::DEBUG ( "requre url:" . "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/select_un" );
			self::http_post ( "http://" . $_SERVER ['HTTP_HOST'] . "/index.php?r=home/NotifyWx/select_un", $data );
			return true;
		}
	}
}

Log::DEBUG ( "begin notify" );
$notify = new PayNotifyCallBack ();
$notify->Handle ( false );
